Conventionally, a user's computing experiences with calendar applications were typically focused upon a particular device within a given environment. For instance, the user might interact with a calendar application running on a desktop computer in the work environment, to view, create and modify work-related calendar events such as appointments, conference calls, and meetings. Such events are often scheduled during commonly-used hours, such as the user's regular work hours. However, many events are scheduled outside commonly-used hours or increments of time. For example, a user might also have a home computer for viewing, creating, and modifying personal calendar events. In addition to a home computer, the user might employ a mobile computing device, e.g., a smart phone, and/or a portable computer, e.g., a laptop computer or tablet computer, for use in both the work and home environments. In either case, the calendar entries that the user created, edited or accepted were typically stored on the user's computing device, or accessed via a network to which the computing device was connected.
Users of mobile devices with calendar applications are often unable to efficiently display calendar events such as meetings and appointments due to the limited display sizes of mobile devices. Although response time and ease of navigation is critical to the usefulness of user interfaces (UIs), UIs for current mobile operating systems and platforms are unable to display views of calendar applications (i.e., ranges of days, weeks, and months) without either hiding or minimizing ‘off-hour’ time increments. Traditional UIs for calendar applications that attempt to display calendar views spanning large durations (i.e., several days, weeks, or months) typically subject users to delays as they attempt to navigate calendar views. This problem is compounded when increments of ‘off hours’ time (i.e., late evening and early morning hours) are given equal display space alongside ‘peak’ or commonly-used ‘core’ time increments (i.e., business hours for a user).
Advances in the capabilities of mobile computing devices allow users to access both personal and work-related calendar information from almost anywhere, without needing access to work or home computers. Such users can use these devices to subscribe to one or more calendars so that they can view and modify calendar appointments while, for example, traveling from one physical location to another. This is particularly advantageous in a business environment, where mobile devices are prevalent and are commonly used to create, disseminate, and accept events such as appointments and meeting requests. Many business users from diverse occupations rely on the devices to access data from calendar applications and event databases or data stores while away from the office. Some subset of enterprise calendar event data is commonly downloaded, or synchronized, to these mobile devices for viewing and interacting with the calendar entries (i.e., accepting, declining, and altering appointment requests) in user interfaces on the mobile devices.
While the relatively small size of a mobile device aids in portability, the size may also prove to be a hindrance for some users and applications, particularly for mobile users who need to view data from calendar applications, such as, but not limited to the iCal application developed by Apple Inc., the calendar feature of Microsoft Outlook, and the Google Calendar component of Gmail from Google, Inc.
Despite advances in mobile technology, mobile devices typically have greater limitations on display size, memory capacity, data storage capacity, central processing unit (CPU) capacity, and networkability than desktop and laptop computers. Due to these limitations, some mobile device operating platforms with touch screen interfaces, such as the iOS operating system (OS) developed by Apple Inc., the Android platform from Google Inc.; and the Blackberry OS from Research In Motion (“RIM”) and similar mobile operating systems cannot efficiently display large ranges of dates and times (i.e., appointment data for a 24-hour period) in a single view. These limitations present challenges when different portions of calendar data needs to be displayed in response to user scrolling or navigation inputs within a user interface (UI) of a mobile device. Given the versatility of mobile devices, it is desired to implement a means by which these mobile devices can efficiently retrieve and display subsets of calendar data from server-side databases and efficiently display these subsets in the context of potentially intermittent, unreliable, occasionally-connected, variable speed (quality of service/QoS), or temporarily-unavailable networking capabilities.
As more and more enterprise calendar applications perform calendar database synchronizations from an application server to mobile devices, mobile device user interfaces are called upon to efficiently display larger and larger calendar datasets. Despite advances in the central processing units (CPUs), memory capacity, and storage capacity realized with newer mobile devices, mobile applications consuming large amounts of memory to handle calendar applications still degrade the user experience on mobile platforms. For example, traditional techniques for displaying a calendar view spanning many days or weeks that perform adequately on larger displays of servers, workstations, and personal computers are not well suited for platforms with smaller displays such as tablet computers and other mobile devices. Some mobile operating systems (OSs) and mobile versions of calendar applications and websites attempt to address this issue by displaying only a small subset of a calendar or allowing a user to manually zoom in on calendar entries. However, drawbacks of these techniques is that some calendar entries (i.e., scheduled events) may not be readily visible or legible in a calendar view.
A traditional technique for displaying data from calendar applications on mobile platforms relies on ‘just in time’ data retrieval and rendering whereby rows or columns of time increments and event data are fetched and displayed as a user navigates to a given duration (i.e., scrolls to a given day, week or month). However, fetching and rendering event data as a user scrolls or otherwise navigates to a duration often results in unacceptably slow UI response times due to delays associated with such just in time retrieval and display in wireless environments.
A conventional technique to mitigate calendar UI response issues is to display calendar view data and entries (i.e., appointments and meetings) that is stored in a local dataset or data store on the client device. However, one drawback of this technique is that many client devices, particularly mobile devices, lack native calendar applications and/or sufficient local storage and display space to render a calendar UI for a large range of time (i.e., several weeks or months of appointments and events). For example, many calendar applications are web-based and do not include native applications that are locally-installed on client devices. Even for client devices with native calendar applications and ample local storage, traditional display techniques are unable to efficiently display designated ‘core’ or ‘commonly-used’ time increments and their associated calendar entries in a manner that is legible to users. Even with a relatively fast local native calendar data store, this technique can result in stale event data being displayed without resource intensive event data synchronization to keep the calendar data store up to date on a client device. Another disadvantage to this technique is a UI delay experienced by users while large sets of event data are retrieved, stored locally, and rendered.
Despite increased database performance achievable through indexing and query optimization, traditional database implementations in mobile environments are unable to scale up to handling synchronization and display of large amounts of calendar data without noticeable performance issues such as UI delays and lags.
Traditional techniques make it difficult for users to browse or view large time ranges for calendar applications that extend beyond the current viewing area of a mobile device screen. Such a limitation makes traditional techniques inapplicable to applications that need to display long time ranges, such as 24 hours of a day, 7 days of a week, or all days of a month, on relatively small display screens of mobile devices.
Another traditional technique for displaying calendar views on a client device is to use calendar applications whose interfaces hide, omit, minimize, or otherwise do not display non-core time increments, such as weekends, late evening hours, and/or early morning hours. With such traditional calendar applications and interfaces, if a user has accepted an appointment for a time outside of commonly-used time increments, such as from 9 pm to 10 pm, the late evening event would not be visible (out of the calendar view). As a result, the user may overlook and miss off-hours calendar events.
Accordingly, what is desired is the ability to display calendar data from on client devices such as mobile devices in an efficient manner.
What is further needed are systems, methods, and computer program products for reacting to a user's scrolling and touch gestures in a calendar application interface and efficiently displaying all time increments for a given duration (i.e., 24 hours of a day) while a user browses and navigates through a calendar view. As displays of mobile devices often have limited space available for applications, what is further needed is the ability for efficient calendar displays that make better use of available space (i.e., available display ‘real estate’) to enable calendar applications to display larger ranges of time. What is further needed is the ability to react to user touch gestures within a touch screen user interfaces and optimally display calendar entries so that commonly-used time increments (i.e., working hours of a business day) and their corresponding entries are legible on a mobile device's screen while simultaneously displaying the other time increments.